package net.eyra.struts.actions;

import java.util.List;
import java.util.Properties;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.eyra.negocio.aplicacion.Direcciones;
import net.eyra.negocio.aplicacion.Seguridad;
import net.eyra.negocio.dao.EyraDaoException;
import net.eyra.negocio.entidades.explotacion.Parque;
import net.eyra.negocio.entidades.gestion.Funcionalidad;
import net.eyra.negocio.entidades.gestion.Menu;
import net.eyra.negocio.entidades.gestion.Usuario;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.actions.DispatchAction;

public class SeguridadAction extends DispatchAction {

    public ActionForward Salir(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
        LimpiarSesion(request);
        return mapping.findForward("login");
    }

    public ActionForward ValidarUsuario(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
                                                                                                                                         throws EyraDaoException {

        LimpiarSesion(request);

        DynaActionForm usuarioForm = (DynaActionForm) form;
        String usuario = usuarioForm.getString("usuario");
        String clave = usuarioForm.getString("clave");

        Seguridad seguridad = new Seguridad();

        Usuario _usuario = seguridad.ValidarUsuario(usuario, clave, request.getRemoteAddr());
        if (_usuario == null) return mapping.findForward("login");

        request.getSession().setAttribute("funcionalidades", FuncionalidadesUsuario(_usuario));

        request.getSession().setAttribute("usuario", _usuario);
        request.getSession().setAttribute("parques_autorizados", _usuario.getGrupo().getParques());

        String lista_parques_autorizados = "";
        for (Parque parque : _usuario.getGrupo().getParques()) {
            if (lista_parques_autorizados.length() > 0) lista_parques_autorizados += ",";
            lista_parques_autorizados += "{name:'" + parque.getNombre() + "',id:'" + parque.getId_parque() + "'}";
        }
        request.getSession().setAttribute("lista_parques_autorizados", lista_parques_autorizados);

        // if (_usuario.getClave().equals("eyra")) {
        // request.setAttribute("informacion", "Debe cambiar la contraseña");
        // return mapping.findForward("cambio_clave");
        // }

        Direcciones direccion = new Direcciones();
        request.getSession().setAttribute("paises", direccion.ListaPaises());

        return mapping.findForward("principal");
    }

    private Properties FuncionalidadesUsuario(Usuario usuario) {
        Properties _funcionalidades = new Properties();

        List<Funcionalidad> funcionalidades = usuario.getGrupo().getFuncionalidades();

        for (int x = 0; x < funcionalidades.size(); x++) {
            Funcionalidad funcionalidad = funcionalidades.get(x);
            for (int y = 0; y < funcionalidad.getMenus().size(); y++) {
                Menu menu = funcionalidad.getMenus().get(y);
                _funcionalidades.setProperty(menu.getTitulo(), "true");
            }
        }

        return _funcionalidades;
    }

    private void LimpiarSesion(HttpServletRequest request) {
        // HibernateUtil.CerrarSession();
        // request.getSession().setMaxInactiveInterval(600);
        if (!request.getSession().isNew()) {
            while (request.getSession().getAttributeNames().hasMoreElements())
                request.getSession().removeAttribute(request.getSession().getAttributeNames().nextElement().toString());
            request.getSession().invalidate();
        }
    }
}
